Skip to content

chore: sync release with main#2737

Closed
alexdln wants to merge 30 commits into
mainfrom
release
Closed

chore: sync release with main#2737
alexdln wants to merge 30 commits into
mainfrom
release

Conversation

@alexdln
Copy link
Copy Markdown
Member

@alexdln alexdln commented May 13, 2026

📚 Description

Since we merged the latest post directly into the release (to avoid rushing testing and to validate the system), I'm creating a PR to sync the branches. I think this is useful from time to time to avoid potential timeline conflicts.

@vercel
Copy link
Copy Markdown
Contributor

vercel Bot commented May 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
npmx.dev Ready Ready Preview, Comment May 13, 2026 10:53am
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
docs.npmx.dev Ignored Ignored May 13, 2026 10:53am
npmx-lunaria Ignored Ignored May 13, 2026 10:53am

Request Review

@alexdln alexdln marked this pull request as draft May 13, 2026 10:53
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 13, 2026

Review Change Stack

📝 Walkthrough

Summary by CodeRabbit

Release Notes

  • New Features

    • Added support for displaying embedded videos from Bluesky posts with thumbnail previews and click-to-watch functionality.
    • Published npmx 0.11 release notes blog post.
  • Improvements

    • Refined Open Graph metadata handling to preserve blog post-specific image settings.
  • Security

    • Updated security headers to permit Bluesky video content delivery.

Walkthrough

This PR introduces Bluesky video embed support to blog posts, updates security headers to permit Bluesky video content delivery, fixes OG image handling for nested blog pages, and publishes the npmx 0.11 release announcement post featuring the new embed capabilities.

Changes

npmx 0.11 Release with Bluesky Video Embeds

Layer / File(s) Summary
Bluesky video embed support
app/components/global/BlueskyPostEmbed.client.vue
BlueskyPost interface expands embed to include optional thumbnail and aspectRatio fields. Template adds conditional rendering of embedded video block displaying thumbnail image with calculated dimensions and overlay when post.embed.thumbnail is present.
Security headers and blog OG image handling
modules/security-headers.ts, app/app.vue
CSP image-origin allowlist expands to include video.bsky.app and video.cdn.bsky.app. App root introduces isBlogPostRoute computed logic to skip OG image definition on most /blog/* routes, allowing nested blog components to define og:image without override.
npmx 0.11 release announcement
app/pages/blog/release/crystal-chronicle.md
New blog release post with YAML frontmatter metadata (title, authors, tags, date, image, description) and full markdown content covering npmx 0.11 highlights, embedded Bluesky posts, and comprehensive change list.
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: sync release with main' accurately reflects the PR's purpose of syncing the release branch with main, which is evident from the commit messages and description.
Description check ✅ Passed The description explains the rationale for syncing branches—a recent blog post was merged directly into release and the PR aims to keep branches aligned to prevent timeline conflicts.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch release

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov Bot commented May 13, 2026

Codecov Report

❌ Patch coverage is 14.28571% with 6 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
app/app.vue 0.00% 2 Missing and 2 partials ⚠️
app/components/global/BlueskyPostEmbed.client.vue 33.33% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/components/global/BlueskyPostEmbed.client.vue (1)

91-91: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Check array bounds before accessing by index.

The code accesses response.posts[0] without verifying that the array contains at least one element. As per coding guidelines, ensure you always check when accessing an array value by index for strict type safety.

🛡️ Proposed fix
-    return response.posts[0] ?? null
+    return response.posts.length > 0 ? response.posts[0] : null
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/global/BlueskyPostEmbed.client.vue` at line 91, The code
returns response.posts[0] without ensuring posts has elements; update the logic
that returns the post (the expression using response.posts[0] in
BlueskyPostEmbed.client.vue) to first check that response.posts is an array and
has length > 0 (e.g., Array.isArray(response.posts) && response.posts.length >
0) then return response.posts[0], otherwise return null; ensure you use the same
variable names (response and posts) so type-checkers and callers remain correct.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/app.vue`:
- Around line 131-141: The top-level if using isBlogPostRoute.value runs only
once at setup so OG image won't update on client-side navigations; change this
to a reactive effect (e.g. use watchEffect or watch(isBlogPostRoute)) that
re-evaluates when route.path/isBlogPostRoute changes and calls defineOgImage
accordingly, or move the defineOgImage call into page-level components so each
page sets its own OG image; ensure you reference the existing isBlogPostRoute
computed and call defineOgImage inside the reactive watcher (and handle/clear
previous OG image if defineOgImage cannot be called multiple times).

In `@app/components/global/BlueskyPostEmbed.client.vue`:
- Around line 198-199: The template is incorrectly binding
post.embed.aspectRatio.width/height to the height and width attributes (creating
tiny pixel dimensions); remove the :height and :width bindings for the embed
element and instead apply a style using CSS aspect-ratio derived from
post.embed.aspectRatio (e.g., set :style to an object like { aspectRatio:
`${post.embed.aspectRatio.width}/${post.embed.aspectRatio.height}` } when
post.embed.aspectRatio exists), mirroring the existing pattern used for
img.aspectRatio elsewhere in BlueskyPostEmbed.client.vue so the embed scales
correctly.

---

Outside diff comments:
In `@app/components/global/BlueskyPostEmbed.client.vue`:
- Line 91: The code returns response.posts[0] without ensuring posts has
elements; update the logic that returns the post (the expression using
response.posts[0] in BlueskyPostEmbed.client.vue) to first check that
response.posts is an array and has length > 0 (e.g.,
Array.isArray(response.posts) && response.posts.length > 0) then return
response.posts[0], otherwise return null; ensure you use the same variable names
(response and posts) so type-checkers and callers remain correct.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cf1f2194-a598-4a65-94fb-5fb79c908103

📥 Commits

Reviewing files that changed from the base of the PR and between 8ebf42a and 5fd8148.

⛔ Files ignored due to path filters (2)
  • public/blog/og/release-crystal-chronicle.png is excluded by !**/*.png
  • public/blog/team-edinburgh.jpg is excluded by !**/*.jpg
📒 Files selected for processing (4)
  • app/app.vue
  • app/components/global/BlueskyPostEmbed.client.vue
  • app/pages/blog/release/crystal-chronicle.md
  • modules/security-headers.ts

Comment thread app/app.vue
Comment thread app/components/global/BlueskyPostEmbed.client.vue
@alexdln alexdln closed this May 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants